package common;

import astnode.ASTNode;
import astnode.AssignStmtNode;
import astnode.BinaryOperationNode;
import astnode.BranchStmtNode;
import astnode.CallNode;
import astnode.CaseNode;
import astnode.CompoundStmtNode;
import astnode.FunctionDeclarationNode;
import astnode.IfStmtNode;
import astnode.LiteralNode;
import astnode.LoopStmtNode;
import astnode.MarkerStmtNode;
import astnode.ParameterNode;
import astnode.ReturnStmtNode;
import astnode.UnitaryOperationNode;
import astnode.VariableDeclarationNode;
import astnode.VariableNode;

public interface Visitor {

	public abstract void visit(ASTNode node);

	public abstract void visitAssignStmtNode(AssignStmtNode node);

	public abstract void visitParameterNode(ParameterNode node);

	public abstract void visitCaseNode(CaseNode node);

	public abstract void visitLoopStmtNode(LoopStmtNode node);

	public abstract void visitIfStmtNode(IfStmtNode node);

	public abstract void visitReturnStmtNode(ReturnStmtNode node);

	public abstract void visitMarkerStmtNode(MarkerStmtNode node);

	public abstract void visitComspoundStmtNode(CompoundStmtNode node);

	public abstract void visitBranchStmtNode(BranchStmtNode node);

	public abstract void visitCallNode(CallNode node);

	public abstract void visitVariableNode(VariableNode node);

	public abstract void visitUnitaryOperationNode(UnitaryOperationNode node);

	public abstract void visitBinaryOperationNode(BinaryOperationNode node);

	public abstract void visitLiteralNode(LiteralNode node);

	public abstract void visitVariableDeclarationNode(
			VariableDeclarationNode node);

	public abstract void visitFunctionDeclarationNode(
			FunctionDeclarationNode node);

}